<?php
/**
* 功能: 去掉字符串中的反斜线
* 作者: php手册
* 最后一次修改时间: 2011年4月19日16:00:30
* 参数： 
*         string/array $value 
* 返回值:
*         string/array       
*/
function stripslashes_deep($value) {
    $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
    return $value;
}



/**
* 功能: 给特殊字符加上斜线
* 作者: php手册
* 最后一次修改时间: 2011年4月19日16:00:30
* 参数： 
*         string/array $value 
* 返回值:
*         string/array       
*/
function addslashes_deep($value) {
    $value = is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
    return $value;
}




/**
* 功能: 给$_GET,$_POST,$_COOKIE进行特殊字符转义
* 作者: 齐圣福
* 最后一次修改时间: 2011年4月19日16:00:30
* 参数： 
*         
* 返回值:
*                
*/

function addslashes_gpc() {
    if(!MAGIC_QUOTES_GPC) {
        $_GET    = addslashes_deep($_GET);
        $_POST   = addslashes_deep($_POST);
        $_COOKIE = addslashes_deep($_COOKIE);
    }
}


/**
* 功能: 在所有加载的页面中搜索给定字符，主要用来阅读代码时查找变量来源和程序执行流程
* 作者: 齐圣福
* 最后一次修改时间:2011年6月2日22:10:03
* 参数： 
*     string $string   需要查找的变量
*     bool   $exit     查找完成后程序中断还是继续执行  true:中断，false:继续运行    
* 返回值:
*                    
*/

function findStrFromIncludedFiles($string = '', $exit = true) {
    if (empty($string)) {
        return ;
    }
    $included_files = get_included_files();
    foreach ($included_files as $filename) {
        echo $filename.'<BR>';
        $i = 1;
        $handle = fopen($filename, 'r');
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            if (strpos($buffer, $string) !== false) {
                $buffer = str_replace($string, '<font color = "blue">'.$string.'</font>', $buffer);
                echo $i .' <font color = "green">'.$buffer.'</font><BR>';
            }
            $i++;
        }    
        fclose($handle);
        echo '<HR>';
    }
    $exit && exit();
}




/**
* 功能: 输出或返回一个变量的字符串表示，主要用于保存或者缓存变量到文件
* 作者: 齐圣福
* 最后一次修改时间: 2011年4月19日16:10:55
* 参数： 
*     string/array $var   需要查找的变量
* 返回值:
*                    
*/

function varToStr($var, $level = 0) {
    if(!is_array($var)) {
        return "'".$var."'";
    }
    return var_export($var, true);
}



/**
* 功能: 刷新当前页面
* 作者: 齐圣福
* 最后一次修改时间: 2011年4月19日16:10:55
* 参数： 
*     string $method   刷新方式  默认php，否则js  
* 返回值:
*                    
*/
function redo($method = 'php') {
    $curPage = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    if ($method == 'php') {
        header('location:'.$curPage);
        exit();
    } 
    echo "<script  language='javascript'>window.location.href='".$curPage."';</script>";
    exit();
    
}

/**
* 功能: 自动生成model文件
* 作者: 齐圣福
* 最后一次修改时间: 2011年5月3日10:03:14
* 参数： 
*     string $modelName     model名
*     string $table         表名
*     string $primaryKey    主键
*     string $db            数据库名
* 返回值:
*     bool   true成功  flase失败
*                    
*/
function createModelFile($modelName, $table, $primaryKey, $db) {
    if (empty($modelName)) {
        return false;
    }
    $handle = @fopen(APP_PATH.'/models/'.$modelName.'.class.php', 'w+');
    $content = '<?php'."\r\n".'
        class '.$modelName.' extends Model {'."\r\n".' 
           public $db = \''.$db.'\';'."\r\n".'
           public $table = \''.$table.'\';'."\r\n".'
           public $primaryKey = \''.$primaryKey.'\';'."\r\n".'
        }'."\r\n".'
    '."\r\n";
    if ($handle && @fwrite($handle, $content)) {
        @fclose($handle);
        return true;
    }
    return false;

}


//加密解密函数
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

	$ckey_length = 4;
	$key = md5($key ? $key :AppConfig::$authKkey);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);

	$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);

	$result = '';
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}

	if($operation == 'DECODE') {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
			return substr($result, 26);
		} else {
			return '';
		}
	} else {
		return $keyc.str_replace('=', '', base64_encode($result));
	}

}



